package main

/**
go build -gcflags '-m -l' case_leaking_param.go
# command-line-arguments
./case_leaking_param.go:22:19: leaking param: u to result ~r1 level=0
./case_leaking_param.go:27:19: &User2{...} does not escape

leaking param，它说明了变量 u 是一个泄露参数。结合代码可得知其传给 GetUserInfo2 方法后，
没有做任何引用之类的涉及变量的动作，直接就把这个变量返回出去了。

因此这个变量实际上并没有逃逸，它的作用域还在 main() 之中，所以分配在栈上。

如果把 return u -> return &u, 那么就考虑会被外部所引用，因此妥妥的分配到堆上了
 */
type User2 struct {
	ID     int64
	Name   string
	Avatar string
}

func GetUserInfo2(u *User2) *User2 {
	return u
}

func main() {
	_ = GetUserInfo2(&User2{ID: 13746731, Name: "EDDYCJY", Avatar: "https://avatars0.githubusercontent.com/u/13746731"})
}